<?php

/**
 * Definicion de todas las funciones de php para acceso a la base de datos
 * @autor daniel
 * @fecha noviembre 2013
 */

include('config.php');


    /**
     * Abre y crea una conexion a la bd de datos
     * @autor daniel
     * @fecha diciembre de 2013
     */
    function abreConexion()
	{
		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
		$conexion=mysql_connect($dbhost,$dbuser,$dbpassword);
		mysql_select_db($dbname,$conexion);
		
	}

    /**
     * Cierra la conexion global a la bd
     * @autor daniel
     * @fecha diciembre de 2013
     */
    function cierraConexion()
	{
		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
		mysql_close($conexion);
	}
	
	function eliminarColumna($nombreTabla, $nombreColumna)
	{
		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
		abreConexion();
		$consulta = "ALTER TABLE ".$nombreTabla." DROP ".$nombreColumna.";";
		if ( ! mysql_query( $consulta , $conexion ) )
		{	
			muestraError( mysql_errno($conexion),mysql_error($conexion)) ;
			cierraConexion();
			die();
		}
		cierraConexion();
		
	}
	
	
	
	function eliminarTabla($nombreTabla)
	{
		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
		abreConexion();
		$consulta = "DROP TABLE ".$nombreTabla;
		if ( ! mysql_query( $consulta , $conexion ) )
		{	
			muestraError( mysql_errno($conexion),mysql_error($conexion)) ;
			cierraConexion();
			die();
		}
		cierraConexion();
		
	}
	function getTablas()
	{
		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;	
		abreConexion();	
		$consulta="SHOW TABLES;";
		
		if ( ! $mTablas=mysql_query($consulta,$conexion) )
		{ 
			muestraError( mysql_errno($conexion),mysql_error($conexion));
			cierraConexion();
			die();
		}
			
		cierraConexion();
		return $mTablas;
	}
	function getColumnas($tabla)
	{
		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
		abreConexion();	
		$consulta ="SHOW COLUMNS FROM ".$tabla;
		if ( ! $gColumnas = mysql_query( $consulta ,$conexion) ) 
		{
			muestraError( mysql_errno($conexion),mysql_error($conexion));
			cierraConexion();
			die();
		}
		
        cierraConexion();
		return $gColumnas;
	}
	function getUnaColumna($tabla, $campo)
	{
		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
		abreConexion();	
		$consulta ="SHOW COLUMNS FROM ".$tabla.' WHERE Field="'.$campo.'"';
		if ( ! $gColumnas = mysql_query( $consulta ,$conexion) ) 
		{
			muestraError( mysql_errno($conexion),mysql_error($conexion));
			cierraConexion();
			die();
		}
		$re = mysql_fetch_array($gColumnas);
        cierraConexion();
		return $re;
	}
	function muestraError($cError, $error)
	{
		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
		
		//echo $error;
		echo '<script>
		var cError = "'.$cError.'";
		var Error = "'.$error.'";
		$( "#modeloMensaje" ).modal("show");		
		//$( "#modeloNuevaTabla" ).modal("hide");
		$( "#cuerpoMensaje" ).load("err.php", { error : Error, cError : cError });
		</script>';
	}
	function existeAutoIncrement($tabla)
	{
		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
		
		
		abreConexion();	
		$consulta ="SHOW COLUMNS FROM ".$tabla.' WHERE Extra="auto_increment"';
		if ( ! $gColumnas = mysql_query( $consulta ,$conexion) ) 
		{
			muestraError( mysql_errno($conexion),mysql_error($conexion));
			cierraConexion();
			die();
		}
		$re = mysql_num_rows($gColumnas);
		return $re;

	}
	
	function nuevaColumna($tabla,$columna, $tipo, $longitud, $extra, $pri )
	{
		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
		
		$cClaves = "";
		
		abreConexion();	

		$consulta ="alter table ".$tabla.' add '.$columna.' '.$tipo;
		
		if ( $tipo=="VARCHAR" )
			$consulta=$consulta.' ('.$longitud.')';
		
		$consulta=$consulta.' not null';

		if ( $extra=="true" )
			$consulta=$consulta.' auto_increment';
				
		
		if($pri=="true")
		{
			$consulta2="SHOW COLUMNS FROM ".$tabla;
			
			if ( ! $campos = mysql_query( $consulta2 ,$conexion) ) 
			{	
				muestraError( mysql_errno($conexion),mysql_error($conexion));
				cierraConexion();
				die();
			}
			
			if ( mysql_num_rows($campos) > 0)
			{
				$cClaves = ", add primary key ( ";
				
				$cont=0;
				
				while($unaColumna = mysql_fetch_array($campos)) 
				{	
					if($unaColumna['Key']=="PRI")
					{
						$cont++;
						$cClaves=$cClaves.$unaColumna['Field'];
						$cClaves=$cClaves.",";
					}
				}
				if($cont != 0)
				{
					//substr($cClaves,-sizeof($cClaves),sizeof($cClaves)-1);
					
					$eClaves = "alter table ".$tabla." drop primary key;";
					
			if ( ! $algo = mysql_query( $eClaves,$conexion) ) 
			{	
				muestraError( mysql_errno($conexion),mysql_error($conexion));
				cierraConexion();
				die();
			}



					
				}
				
				$cClaves = $cClaves.$columna;
				
			}
			$cClaves=$cClaves." )";		
		}
		
			if ( ! $algo = mysql_query( $consulta.$cClaves,$conexion) ) 
			{	
				muestraError( mysql_errno($conexion),mysql_error($conexion));
				cierraConexion();
				die();
			}
		
		
//		echo "<br>".$eClaves;
//		echo "<br>".$consulta.$cClaves.";";
				
	}	
	
	
	function modificarColumna($tabla, $columna1, $columna2, $tipo, $longitud, $extra, $pri )
	{
		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
		
		
		$cClaves = "";
		$eClaves = "";
		$consulta = "";
		
		abreConexion();	

		$consulta ="alter table ".$tabla.' change '.$columna1.' '.$columna2.' '.$tipo;
		
		if ( $tipo=="VARCHAR" )
			$consulta=$consulta.' ('.$longitud.')';
		
		$consulta=$consulta.' not null';

		if ( $extra=="true" )
			$consulta=$consulta.' auto_increment';
				
		
		if($pri=="true")
		{
			$consulta2="SHOW COLUMNS FROM ".$tabla;
			
			if ( ! $campos = mysql_query( $consulta2 ,$conexion) ) 
			{	
				muestraError( mysql_errno($conexion),mysql_error($conexion));
				cierraConexion();
				die();
			}
			
			if ( mysql_num_rows($campos) > 0 )
			{
				$cClaves = ", add primary key ( ";
				
				$cont=0;
				
				while($unaColumna = mysql_fetch_array($campos)) 
				{	
					if($unaColumna['Key']=="PRI" )
					{
						$cont++;	
						if ( $unaColumna['Field']!=$columna1 )
						{
							$cClaves=$cClaves.$unaColumna['Field'];
							$cClaves=$cClaves.",";
						}
					}
					
				}
				if($cont != 0)
				{
					//substr($cClaves,-sizeof($cClaves),sizeof($cClaves)-1);
					
					$eClaves = "alter table ".$tabla." drop primary key;";
					
					if ( ! $algo = mysql_query( $eClaves,$conexion) ) 
					{	
						muestraError( mysql_errno($conexion),mysql_error($conexion));
						cierraConexion();
						die();
					}	

				}
				
				$cClaves = $cClaves.$columna2;
				
			}
			$cClaves=$cClaves." )";		
		}
		


			if ( ! $algo = mysql_query( $consulta.$cClaves,$conexion) ) 
			{	
				muestraError( mysql_errno($conexion),mysql_error($conexion));
				cierraConexion();
				die();
			}


//		echo "<br>".$eClaves;
//		echo "<br>".$consulta.$cClaves.";";
			
	}	
	
	function getTuplas($tabla)
	{
		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
		abreConexion();	
		$consulta ="SELECT * FROM ".$tabla;
		if ( ! $resultado = mysql_query( $consulta ,$conexion) ) 
		{
			muestraError( mysql_errno($conexion), mysql_error($conexion) );
			cierraConexion();
			die();
		}
		
		cierraConexion();
		return $resultado;
		
		
		}
	
	function eliminaTupla($tabla, $id)
	{
		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
		abreConexion();	
		$consulta ="SELECT * FROM ".$tabla.";";
		if ( ! $resultado = mysql_query( $consulta ,$conexion ) ) 
		{
			muestraError( mysql_errno($conexion), mysql_error($conexion) );
			cierraConexion();
			die();
		}
		
		cierraConexion();
		
		$cont=0;
		
		while( $cont <= $id ) 
		{
			$unaTupla = mysql_fetch_array($resultado) ;
			$cont++;
		}
		
		
		$consulta2='DELETE FROM '.$tabla.' WHERE ';
		$columnas= getColumnas( $tabla );
			
		$cont=0;
		$nCol=  mysql_num_rows($columnas);
		
		while($unaColumna = mysql_fetch_array($columnas))
		{
			if ( getNombreTipo( $unaColumna['Type'] ) == "FECHA" || getNombreTipo( $unaColumna['Type'] ) == "TEXTO"  )
				$consulta2 =$consulta2 . $unaColumna['Field']."= '".$unaTupla[ $unaColumna['Field'] ] ."' " ;
					else 
				$consulta2 =$consulta2 . $unaColumna['Field']."= ".$unaTupla[ $unaColumna['Field'] ] ;
				$cont++;
				if ($cont < $nCol )
					$consulta2 =$consulta2 . " AND ";
		}
					
		$consulta2 =$consulta2 . " LIMIT 1 ; ";
		//echo $consulta2;
		
		abreConexion();	
		
		//echo $consulta2;
		if ( ! $algos = mysql_query( $consulta2 ,$conexion )  )
		{	
			muestraError( mysql_errno($conexion),mysql_error($conexion));
			cierraConexion();
			die();
		}
		cierraConexion();
		
		}
	
	function getNombreTipo($type)
	{
	    global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
 	    $nombre="";
		$i=0;					
		
	    while( $i < strlen( $type ) && $type[$i]!= '(' ){
	    $nombre=$nombre.$type[$i];
	    $i++;
             }
		
			 
		if ($nombre == "int")
			return "ENTERO";
		if ($nombre == "varchar")
			return "TEXTO";
		if ($nombre == "date")
			return "FECHA";
		if ($nombre == "float")
			return "FLOTANTE";
		if ($nombre == "tinyint")
			return "BOOLEANO";
		return $nombre;
		
	}
	
    function getLongitud($type)
    {
       $longitud="";
       $i=0;
       $ban=0;
	   
	   if ( getNombreTipo($type) == "TEXTO" )
	   {
		   while( $i < strlen($type) && $type[$i]!= ')')
	   		{
         		if($ban==1)
           			$longitud=$longitud.$type[$i];
         		if($type[$i]=='(')
           			$ban=1;     
	     		$i++;
       		}
	   	return $longitud;
	   }			
	   return "-";
     }
	
	
	  
	function getNombreTablas()
	{
	  global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
	  abreConexion();
	  $consulta="SHOW TABLES";
	  $res=mysql_query($consulta,$conexion)or die(mysql_error());
	  
        $array=array();
        $j=0;
          while($Rs = mysql_fetch_array($res)) 
		  {
           $Sql2 ="DESCRIBE ".$Rs[0];
           $result2 = mysql_query( $Sql2 ) or die("No se puede ejecutar la consulta: ".mysql_error());
           $array[$j]=$Rs[0];
           $j++;
          }
	  return $array;
	}
    function getAtributo_y_Tipo($nombreTabla)
	{
	  global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
	  abreConexion();
	  $Sql2 ="DESCRIBE ".$nombreTabla;
      $result2 = mysql_query( $Sql2 ) or die("No se puede ejecutar la consulta: ".mysql_error());
      $j=0;
      $array= array();
      while($Rs2 = mysql_fetch_array($result2)) 
	  {
         $array[$j]=$Rs2['Field'];
         $j++;
         $array[$j]=$Rs2['Type'];
         $j++;	
	  }
		return $array;
	}
	function renombrarTabla($nombreActual , $nombreNuevo)
	{
	  global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
	  abreConexion();
	  $Sql2 ="DESCRIBE ".$nombreActual;
      $result2 = mysql_query( $Sql2 ) or die("No se puede ejecutar la consulta: ".mysql_error());
	  $sql= 'ALTER TABLE  {$nombreActual} RENAME {$nombreNuevo}';
	  $sql= 'RENAME TABLE '. $nombreActual.' TO '.$nombreNuevo;
	  $succes=mysql_query($sql,$conexion)or die(mysql_error());
        return $nombreNuevo;
	}
	
	function eliminarAllTuplas($tabla)
        {
          global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
          abreConexion();	
          $consulta ="DELETE FROM ".$tabla;
	  $res=mysql_query($consulta,$conexion)or die(mysql_error());          
          cierraConexion();
        }

     function eliminarTupla($tabla,$atri,$val)
	{
	  global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
          abreConexion();	
          $consulta ="DELETE FROM ".$tabla." WHERE ".$atri."=".$val;
	  $res=mysql_query($consulta,$conexion)or die(mysql_error());   	
          cierraConexion();
	}

    function getNumTuplas($tabla)
	{
		
	  	global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
          abreConexion();	
          $consulta ="SELECT COUNT(*) FROM ".$tabla;
	  	  $res=mysql_query($consulta,$conexion)or die(mysql_error());   
          $tuplas=mysql_result($res,0);	
          cierraConexion();
	  return $tuplas;
	}

        function agregarTupla($tabla,$val)
        {
          global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
          abreConexion();
          $n=count($val);	
          $consulta ="INSERT INTO ".$tabla." VALUES (";
          for($i=0;$i<$n;$i++)
          {
            $consulta=$consulta."'".$val[$i]."'";
            if($i<$n-1)
             $consulta=$consulta.",";
          }  
          $consulta=$consulta.");"; 
          $res=mysql_query($consulta,$conexion)or die(mysql_error());
          cierraConexion();
         }
		 

	function AgregarTabla( $nombre , $columnas , $atributos , $tipo , $longitud , $llaves , $incremento  )
	{
		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
		
		abreConexion();

		$consulta = "CREATE TABLE ".$nombre." ( ";

		$numero_de_llaves = 0;

		for( $i = 0 ; $i < $columnas ; $i++ )
		{
			$consulta = $consulta.$atributos[ $i ]." ".$tipo[ $i ];

			if( $tipo[ $i ] == 'VARCHAR') $consulta = $consulta." ( ".$longitud[ $i ]." )";
			
			if( $incremento[ $i ] == 'SI' )  $consulta = $consulta." AUTO_INCREMENT ";

			if( $llaves[ $i ] == 'SI' )  $numero_de_llaves++;

			$consulta = $consulta." , ";
		}

		$consulta = $consulta."PRIMARY KEY ( ";

		for( $i = 0 ; $i < $columnas ; $i++ )
		{
			if( $llaves[ $i ] == 'SI'  ) $consulta = $consulta.$atributos[ $i ] ;
			if ( $numero_de_llaves > 1 ) $consulta = $consulta." , " ; 
			$numero_de_llaves--;
		}

		$consulta = $consulta." ) )";

		if ( ! $gColumnas = mysql_query( $consulta , $conexion) ) 
		{
			muestraError( mysql_errno($conexion),mysql_error($conexion));
			cierraConexion();
			die();
		}
		
		cierraConexion();
		return $consulta ; 
	}

	function agregarRegistro( $nombre , $columnas , $valores )
	{

		global $conexion, $dbhost, $dbuser, $dbpassword, $dbname;
        abreConexion();

        $consulta = "INSERT INTO ".$nombre." VALUES ( ";

        for( $i = 0 ; $i < $columnas ; $i++ )
        {
        	$consulta = $consulta." '".$valores[ $i ]."' ";
        	if( $i != $columnas- 1 ) $consulta = $consulta." , ";
        }

        $consulta = $consulta." )";

		if ( ! $respuesta = mysql_query( $consulta , $conexion ) ) 
		{
			muestraError( mysql_errno($conexion),mysql_error($conexion));
			cierraConexion();
			die();
		}

        cierraConexion();

        return $respuesta;
	}

?>